#include <iostream>

using namespace std;

//class Ason
//{
//public:
//	Ason(const Ason& aSon) { cout << "Ason(const Ason& aSon)" << endl; }
//	Ason() {};
//	int m_Ason;
//};
//
//class A
//{
//public:
//	A() { cout << "A()" << endl; }
//	Ason asonobj;
//	int m_test;
//};
//
//int main()
//{
//	//A mya;
//	//mya.m_test = 15;	//
//	//A mya2 = mya;
//
//	A mya;
//	mya.m_test = 15;
//	mya.asonobj.m_Ason = 120;
//
//	A mya2 = mya;	// 递归式的赋值
//
//	return 0;
//}


//class A
//{
//public:
//	/*A(const A& a) { cout << "A(const A& a)" << endl; }
//	A() = default;*/
//	virtual void funA() {};
//	int m_a;
//};
//
//class Ason : public A
//{
//public:
//	Ason(const Ason& ason) { A::A(ason); cout << "Ason(const Ason&)" << endl; }
//	Ason() = default;
//	virtual void funAson() {};
//	int m_Ason;
//};
//
//int main()
//{
//	Ason mya;
//	mya.m_Ason = 10;
//	Ason mya2 = mya;
//	A::A(mya);
//
//	return 0;
//}


//// 第4种， 虚基类
//
//class Grand 
//{};
//class A : virtual public Grand
//{};
//class B : virtual public Grand
//{};
//
//class C : public A, B
//{};
//
//int main()
//{
//	C myc;
//	C myc2 = myc;	// 会生成拷贝构造函数
//}


class A
{
public:
	//A operator=(const A& a)
	//{
	//	this->_a = a._a;
	//	this->_name = a._name; // 调用string的"拷贝赋值运算符"
	//
	//	return *this;
	//}
	A operator=(A& a)	// 自定义“移动赋值语句”
	{
		this->_a = a._a;
		this->_name = move(a._name);	// 会移动资源
		return *this;
	}
public:
	int _a = 1;
	const string _name = "zhangsan";
};

int main()
{
	A mya;

	A mya2 = move(mya);		// "构造函数"

	A mya3;
	mya3._a = 10;
	mya3._name = "lisi";

	//mya3 = move(mya2);		// "赋值运算符"
	mya3 = mya2;		// "赋值运算符"
	return 0;
}